<?php
echo url_slug("קצת שלג ושמיכות-זה מה שצריך בשביל 'בייבי בום': עלייה של 50% במספר הלידות");
function url_slug($str, $options = array()) {
// Make sure string is in UTF-8 and strip invalid UTF-8 characters
$str = mb_convert_encoding((string)$str, 'UTF-8', mb_list_encodings());
$defaults = array(
'delimiter' => '-',
'limit' => null,
'lowercase' => true,
'replacements' => array(),
'transliterate' => false,
);
// Merge options
$options = array_merge($defaults, $options);
$char_map = array(
// Latin
'A' => 'A', '?' => 'A', 'A' => 'A', '?' => 'A', '?' => 'A', '?' => 'A', '?' => 'AE', 'C' => 'C',
'E' => 'E', 'E' => 'E', 'E' => 'E', 'E' => 'E', '?' => 'I', '?' => 'I', 'I' => 'I', 'I' => 'I',
'?' => 'D', '?' => 'N', '?' => 'O', '?' => 'O', 'O' => 'O', '?' => 'O', '?' => 'O', '?' => 'O',
'?' => 'O', 'U' => 'U', '?' => 'U', 'U' => 'U', 'U' => 'U', '?' => 'U', '?' => 'Y', '?' => 'TH',
'?' => 'ss',
'à ' => 'a', '?' => 'a', 'â' => 'a', '?' => 'a', '?' => 'a', '?' => 'a', '?' => 'ae', 'ç' => 'c',
'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', '?' => 'i', '?' => 'i', 'î' => 'i', 'ï' => 'i',
'?' => 'd', '?' => 'n', '?' => 'o', '?' => 'o', 'ô' => 'o', '?' => 'o', '?' => 'o', '?' => 'o',
'?' => 'o', 'ù' => 'u', '?' => 'u', 'û' => 'u', 'ü' => 'u', '?' => 'u', '?' => 'y', '?' => 'th',
'?' => 'y',
// Latin symbols
'©' => '(c)',
// Greek
'?' => 'A', '?' => 'B', '?' => 'G', '?' => 'D', '?' => 'E', '?' => 'Z', '?' => 'H', '?' => '8',
'?' => 'I', '?' => 'K', '?' => 'L', '?' => 'M', '?' => 'N', '?' => '3', '?' => 'O', '?' => 'P',
'?' => 'R', '?' => 'S', '?' => 'T', '?' => 'Y', '?' => 'F', '?' => 'X', '?' => 'PS', '?' => 'W',
'?' => 'A', '?' => 'E', '?' => 'I', '?' => 'O', '?' => 'Y', '?' => 'H', '?' => 'W', '?' => 'I',
'?' => 'Y',
'?' => 'a', '?' => 'b', '?' => 'g', '?' => 'd', '?' => 'e', '?' => 'z', '?' => 'h', '?' => '8',
'?' => 'i', '?' => 'k', '?' => 'l', '?' => 'm', '?' => 'n', '?' => '3', '?' => 'o', '?' => 'p',
'?' => 'r', '?' => 's', '?' => 't', '?' => 'y', '?' => 'f', '?' => 'x', '?' => 'ps', '?' => 'w',
'?' => 'a', '?' => 'e', '?' => 'i', '?' => 'o', '?' => 'y', '?' => 'h', '?' => 'w', '?' => 's',
'?' => 'i', '?' => 'y', '?' => 'y', '?' => 'i',
// Turkish
'?' => 'S', '?' => 'I', 'C' => 'C', 'U' => 'U', '?' => 'O', '?' => 'G',
'?' => 's', '?' => 'i', 'ç' => 'c', 'ü' => 'u', '?' => 'o', '?' => 'g',
// Russian
'?' => 'A', '?' => 'B', '?' => 'V', '?' => 'G', '?' => 'D', '?' => 'E', '?' => 'Yo', '?' => 'Zh',
'?' => 'Z', '?' => 'I', '?' => 'J', '?' => 'K', '?' => 'L', '?' => 'M', '?' => 'N', '?' => 'O',
'?' => 'P', '?' => 'R', '?' => 'S', '?' => 'T', '?' => 'U', '?' => 'F', '?' => 'H', '?' => 'C',
'?' => 'Ch', '?' => 'Sh', '?' => 'Sh', '?' => '', '?' => 'Y', '?' => '', '?' => 'E', '?' => 'Yu',
'?' => 'Ya',
'?' => 'a', '?' => 'b', '?' => 'v', '?' => 'g', '?' => 'd', '?' => 'e', '?' => 'yo', '?' => 'zh',
'?' => 'z', '?' => 'i', '?' => 'j', '?' => 'k', '?' => 'l', '?' => 'm', '?' => 'n', '?' => 'o',
'?' => 'p', '?' => 'r', '?' => 's', '?' => 't', '?' => 'u', '?' => 'f', '?' => 'h', '?' => 'c',
'?' => 'ch', '?' => 'sh', '?' => 'sh', '?' => '', '?' => 'y', '?' => '', '?' => 'e', '?' => 'yu',
'?' => 'ya',
// Ukrainian
'?' => 'Ye', '?' => 'I', '?' => 'Yi', '?' => 'G',
'?' => 'ye', '?' => 'i', '?' => 'yi', '?' => 'g',
// Czech
'?' => 'C', '?' => 'D', '?' => 'E', '?' => 'N', '?' => 'R', '?' => 'S', '?' => 'T', '?' => 'U',
'?' => 'Z',
'?' => 'c', '?' => 'd', '?' => 'e', '?' => 'n', '?' => 'r', '?' => 's', '?' => 't', '?' => 'u',
'?' => 'z',
// Polish
'?' => 'A', '?' => 'C', '?' => 'e', '?' => 'L', '?' => 'N', '?' => 'o', '?' => 'S', '?' => 'Z',
'?' => 'Z',
'?' => 'a', '?' => 'c', '?' => 'e', '?' => 'l', '?' => 'n', '?' => 'o', '?' => 's', '?' => 'z',
'?' => 'z',
// Latvian
'?' => 'A', '?' => 'C', '?' => 'E', '?' => 'G', '?' => 'i', '?' => 'k', '?' => 'L', '?' => 'N',
'?' => 'S', '?' => 'u', '?' => 'Z',
'?' => 'a', '?' => 'c', '?' => 'e', '?' => 'g', '?' => 'i', '?' => 'k', '?' => 'l', '?' => 'n',
'?' => 's', '?' => 'u', '?' => 'z'
);
// Make custom replacements
$str = preg_replace(array_keys($options['replacements']), $options['replacements'], $str);
// Transliterate characters to ASCII
if ($options['transliterate']) {
$str = str_replace(array_keys($char_map), $char_map, $str);
}
// Replace non-alphanumeric characters with our delimiter
$str = preg_replace('/[^\p{L}\p{Nd}]+/u', $options['delimiter'], $str);
// Remove duplicate delimiters
$str = preg_replace('/(' . preg_quote($options['delimiter'], '/') . '){2,}/', '$1', $str);
// Truncate slug to max. characters
$str = mb_substr($str, 0, ($options['limit'] ? $options['limit'] : mb_strlen($str, 'UTF-8')), 'UTF-8');
// Remove delimiter from ends
$str = trim($str, $options['delimiter']);
return $options['lowercase'] ? mb_strtolower($str, 'UTF-8') : $str;
}
1